<?php 
	
	/**
	 * 数据导出下载
	 * Enter description here ...
	 * @param unknown_type $data 数据【二维数组】
	 * @param unknown_type $Columns 字段和中文解释【二维数组】
	 * @param unknown_type $name 文件名
	 */
	function exportData($data,$Columns,$name) {
		Vendor ( 'Excel.PHPExcel' );	
		if(empty($data) || !is_array($data)){
	        die("data must be a array");
	    }
	    if(empty($name)){
	        exit;
	    }
	    $date = date("Y_m_d",time());
	    $name .= "_$date";
	    
	    //创建新的PHPExcel对象
	    $objPHPExcel = new PHPExcel();
	    $objProps = $objPHPExcel->getProperties();
	    
	    //设置表头
	    $key = ord("A");
	    $objActSheet = $objPHPExcel->getActiveSheet ();
		$objPHPExcel->getProperties()->setSubject ('A2',$name );
	    foreach($Columns as $v){
	        $colum = chr($key);
	        $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'3', $v['name']);
	        $key += 1;
	    }
	    $column = 4;
	    foreach($data as $key => $rows){ //行写入
	        $span = ord("A");
	        foreach($Columns as $keyName=>$value){// 列写入
	            $j = chr($span);
	            $objActSheet->setCellValue($j.$column, $rows[$value['value']]);
	            $span++;
	        }
	        $column++;
	    }
	    $name = iconv("utf-8", "gb2312", $name);
	    //重命名表
	    $objPHPExcel->getActiveSheet()->setTitle('Simple');
	    //设置活动单指数到第一个表,所以Excel打开这是第一个表
	    $objPHPExcel->setActiveSheetIndex(0);
	    //将输出重定向到一个客户端web浏览器(Excel2007)
        header ( 'Content-Type: application/vnd.ms-excel' );
		header ( 'Content-Disposition: attachment;filename="' . $name . '.xls"' ); //"'.$filename.'.xls"
		header ( 'Cache-Control: max-age=0' );
		
		$objWriter = PHPExcel_IOFactory::createWriter ( $objPHPExcel, 'Excel5' ); //在内存中准备一个excel2003文件
		$objWriter->save ( 'php://output' );
		
	}
	
	
	/**
	 * 数据导出到本地
	 * @param string data 数据 【二维数组】
	 * @param string Columns 字段和中文解释 【二维数组】
	 * @param string name 路径加文件名
	 */
	function exportDataForFile($data,$Columns,$name) {
		Vendor ( 'Excel.PHPExcel' );	
		if(empty($data) || !is_array($data)){
	        die("data must be a array");
	    }
	    if(empty($name)){
	        exit;
	    }
	    //创建新的PHPExcel对象
	    $objPHPExcel = new PHPExcel();
	    $objProps = $objPHPExcel->getProperties();
	    //设置表头
	    $key = ord("A");
	    $objActSheet = $objPHPExcel->getActiveSheet ();
		$objPHPExcel->getProperties()->setSubject ('A2',$name );
	    foreach($Columns as $v){
	        $colum = chr($key);
	        $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v['name']);
	        $key += 1;
	    }
	    $column = 2;
	    foreach($data as $key => $rows){ //行写入
	        $span = ord("A");
	        foreach($Columns as $keyName=>$value){// 列写入
	            $j = chr($span);
	            $objActSheet->setCellValue($j.$column, $rows[$value['value']]);
	            $span++;
	        }
	        $column++;
	    }
	    $name = iconv("utf-8", "gb2312", $name);
	    //重命名表
	    $objPHPExcel->getActiveSheet()->setTitle('Simple');
	    //设置活动单指数到第一个表,所以Excel打开这是第一个表
	    $objPHPExcel->setActiveSheetIndex(0);
	   
		$objWriter = PHPExcel_IOFactory::createWriter ( $objPHPExcel, 'Excel5' ); //在内存中准备一个excel2003文件
		$objWriter->save ( $name );
	}
	
	

    /**
     * 读取Excel文件，返回数组
     * Enter description here ...
     * @param unknown_type $filePath 文件路径
     */
    function importExcellFile($filePath){
    	Vendor ( 'Excel.PHPExcel' );
    	
		//建立reader对象 
		$PHPReader = new PHPExcel_Reader_Excel2007();  
		if(!$PHPReader->canRead($filePath)){  
		    $PHPReader = new PHPExcel_Reader_Excel5();  
		    if(!$PHPReader->canRead($filePath)){  
		        echo 'no Excel';  
		        return ;  
		    }  
		}  
		  
		//建立excel对象，此时你即可以通过excel对象读取文件，也可以通过它写入文件  
		$PHPExcel = $PHPReader->load($filePath); 
		//$PHPExcel = PHPExcel_IOFactory::load($uploadfile);//改成这个写法就好了 
		  
		/**读取excel文件中的第一个工作表*/  
		$currentSheet = $PHPExcel->getSheet(0);  
		/**取得最大的列号*/  
		$allColumn = $currentSheet->getHighestColumn();  
		/**取得一共有多少行*/  
		$allRow = $currentSheet->getHighestRow();  
		  
		//循环读取每个单元格的内容。注意行从1开始，列从A开始  
		for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){
		    for($colIndex='A';$colIndex<=$allColumn;$colIndex++){
		        $addr = $colIndex.$rowIndex;
		        $cell = $currentSheet->getCell($addr)->getValue();
		        if (empty($cell) && empty($start)){
		        	continue;
		        }else {
		        	$start = 1; //开始标记,告诉程序不要再拦截$cell为空的字符串了
			        if($cell instanceof PHPExcel_RichText)     //富文本转换字符串  
			            $cell = $cell->__toString();  
			           
			        $str[$colIndex] = $cell;
		        }
		    }
		    if (!empty($str)){
		    	 $arr[] = $str;
		    }
		}
		unset($arr[0]); //清除表头
		sort($arr);
		return $arr;
    }  
    
    
    
    
    /**
     * 读取Excel文件，返回数组
     * Enter description here ...
     * @param unknown_type $filePath 文件路径
     */
    function readExcellToArr($filePath){
    	Vendor ( 'Excel.PHPExcel' );
    	
		//建立reader对象 
		$PHPReader = new PHPExcel_Reader_Excel2007();  
		if(!$PHPReader->canRead($filePath)){  
		    $PHPReader = new PHPExcel_Reader_Excel5();  
		    if(!$PHPReader->canRead($filePath)){  
		        echo 'no Excel';  
		        return ;  
		    }  
		}  
		  
		//建立excel对象，此时你即可以通过excel对象读取文件，也可以通过它写入文件  
		$PHPExcel = $PHPReader->load($filePath);
		//$PHPExcel = PHPExcel_IOFactory::load($uploadfile);//改成这个写法就好了 
		  
		/**读取excel文件中的第一个工作表*/  
		$currentSheet = $PHPExcel->getSheet(0);  
		/**取得最大的列号*/  
		$allColumn = $currentSheet->getHighestColumn();
		
		/**取得一共有多少行*/  
		$allRow = $currentSheet->getHighestRow();
		
		//生成键名循环读取每个单元格的内容。注意行从1开始，列从A开始  
		for($rowIndex=1;$rowIndex<=1;$rowIndex++){
		    for($colIndex='A';$colIndex<=$allColumn;$colIndex++){
		        $addr = $colIndex.$rowIndex;
		        $cell = $currentSheet->getCell($addr)->getValue();
		        if (empty($cell) && empty($start)){
		        	continue;
		        }else {
		        	$start = 1; //开始标记,告诉程序不要再拦截$cell为空的字符串了
			        if($cell instanceof PHPExcel_RichText){
			        	$cell = $cell->__toString(); //富文本转换字符串  
			        }
			        $title[$colIndex] = $cell;
		        } 
		    }
		}
		
		//循环读取每个单元格的内容。注意行从1开始，列从A开始  
		for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){
		    for($colIndex='A';$colIndex<=$allColumn;$colIndex++){
		        $addr = $colIndex.$rowIndex;
		        $cell = $currentSheet->getCell($addr)->getValue();
		        if (empty($cell) && empty($start)){
		        	continue;
		        }else {
		        	$start = 1; //开始标记,告诉程序不要再拦截$cell为空的字符串了
			        if($cell instanceof PHPExcel_RichText){
			        	$cell = $cell->__toString(); //富文本转换字符串  
			        }
			        $str[$title[$colIndex]] = $cell;
		        }
		    }
		    if (!empty($str)){
		    	 $arr[] = $str;
		    }
		}
		unset($arr[0]); //清除表头
		sort($arr);
		return $arr;
    }

	
	
	
?>